package com.cheng.example.book.advise151.chap7.client109;

import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;


/**
 * 注意：反射效率低是个真命题，但因为这一点而不使用它就是个假命题。
 */
class Utils {

    // 获得一个泛型类的实际泛型类型
    public static <T> Class<T> getGenricClassType(Class clz) {
        Type type = clz.getGenericSuperclass();
        if (type instanceof ParameterizedType) {
            ParameterizedType pt = (ParameterizedType) type;
            Type[] types = pt.getActualTypeArguments();
            if (types.length > 0 && types[0] instanceof Class) {
                // 若有多个泛型参数，依据位置索引返回
                return (Class<T>) types[0];
            }
        }
        return (Class<T>) Object.class;
    }

    public static void main(String[] args) {

        Class<String> type = getGenricClassType(String.class);
//        System.out.println(type.getClass());

        System.out.println(String.class);
    }

}